// 定义一个基础类 Employee
class Employee {
	// 构造函数，初始化员工的基本信息
	constructor(name, id, department) {
		this.name = name; // 员工姓名
		this.id = id; // 员工ID
		this.department = department; // 所属部门
		this._salary = 0; // 私有属性：工资
	}
	// 设置工资方法
	setSalary(amount) {
		if (amount >= 0) {
			this._salary = amount;
		} else {
			console.log('工资不能为负数');
		}
	}
	// 获取工资方法
	getSalary() {
		return this._salary;
	}

	// 员工自我介绍方法
	introduce() {
		console.log(this);
		console.log(`你好，我是 ${this.name}，在 ${this.department} 部门工作，员工ID: ${this.id}`);
	}

	// 计算年终奖（虚拟方法，子类可以重写）
	calculateBonus() {
		console.log(`${this.name} 的年终奖是: 0`);
	}
}

// 定义一个继承自 Employee 类的 Manager（经理）类
class Manager extends Employee {
	constructor(name, id, department, teamSize) {
		super(name, id, department); // 调用父类构造函数初始化公共属性
		this.teamSize = teamSize; // 经理特有的属性：团队人数
	}

	// 重写父类的 introduce 方法
	introduce() {
		super.introduce(); // 调用父类的介绍方法
		console.log(`我管理着一个包含 ${this.teamSize} 人的团队。`);
	}

	// 重写 calculateBonus 方法，经理的年终奖是基于团队人数计算的
	calculateBonus() {
		const bonus = this.teamSize * 500; // 假设每个团队成员的奖金是 500
		console.log(`${this.name} 的年终奖是: ${bonus}`);
	}
}

// 定义一个继承自 Employee 类的 Developer（开发人员）类
class Developer extends Employee {
	constructor(name, id, department, programmingLanguages) {
		super(name, id, department); // 调用父类构造函数初始化公共属性
		this.programmingLanguages = programmingLanguages; // 开发人员特有的属性：编程语言
	}
	// 重写父类的 introduce 方法
	introduce() {
		super.introduce(); // 调用父类的介绍方法
		console.log(`我擅长的编程语言有: ${this.programmingLanguages.join(', ')}`);
	}
	// 重写 calculateBonus 方法，开发人员的年终奖是固定的
	calculateBonus() {
		const bonus = 2000; // 假设开发人员的年终奖是 2000
		console.log(`${this.name} 的年终奖是: ${bonus}`);
	}
}
// 创建 Employee 类的实例
// const employee1 = new Employee('王五', 'E123', '市场部');
// employee1.setSalary(6000);
// employee1.introduce(); // 你好，我是 王五，在 市场部 部门工作，员工ID: E123
// console.log(`工资: ${employee1.getSalary()}`); // 工资: 6000
// employee1.calculateBonus(); // 王五 的年终奖是: 0

// // 创建 Manager 类的实例
// const manager1 = new Manager('赵六', 'M456', '技术部', 10);
// manager1.setSalary(12000);
// manager1.introduce(); // 你好，我是 赵六，在 技术部 部门工作，员工ID: M456
// console.log(`工资: ${manager1.getSalary()}`); // 工资: 12000
// manager1.calculateBonus(); // 赵六 的年终奖是: 5000

// // 创建 Developer 类的实例
// const developer1 = new Developer('孙七', 'D789', '研发部', ['JavaScript', 'Python', 'Go']);
// developer1.setSalary(8000);
// developer1.introduce(); // 你好，我是 孙七，在 研发部 部门工作，员工ID: D789
// console.log(`工资: ${developer1.getSalary()}`); // 工资: 8000
// developer1.calculateBonus(); // 孙七 的年终奖是: 2000

module.exports = {
	Employee,
};
